package cn.tedu.innerclass;
/**本类用作测试内部类的入门案例*/
public class TestInner1 {
    public static void main(String[] args) {
        //4.1创建内部类对象，使用内部类资源
        /**外部类名.内部类名 对象名 = 外部类对象.内部类对象*/
        Outer.Inner oi = new Outer().new Inner();
        System.out.println(oi.sum);
        oi.delete();
        //4.2创建外部类的匿名对象，调用外部类的方法，注意匿名对象只能使用一次
        new Outer().find();

    }
}
//1.创建外部类Outer
class Outer{
    //1.1定义外部类的成员变量
    String name;
    private int age;
    //1.2定义外部类的成员方法
    public void find(){
        System.out.println("外部类...find()");
        //6.测试外部类能否使用内部类的资源----可以，通过内部类的对象！
        /**外部类如果想要使用内部类的资源，必须先创建内部类的对象
         * 通过内部类对象来使用内部类的资源*/
        Inner in = new Inner();
        System.out.println(in.sum);
        in.delete();

    }
    //2.定义内部类----外部内的特殊成员
    /**根据内部类位置的不同，分为成员内部类（类里方法外），局部内部类（方法里）*/
    class Inner{
        //3.1定义内部类的成员变量
        int sum=10;
        //3.2定义内部类的成员方法
        public void delete(){
            System.out.println("内部类...delete()");
            //5.测试内部类是否可以使用外部类的资源
            /**结论：内部类可以直接使用外部类的资源，私有成员也可以！*/
            System.out.println(name);
            System.out.println(age);
            /**注意：此处测试完毕需要注释掉，否则来回调用
             * 会抛出异常StackOverFlowException 栈溢出异常*/
//            find();
        }

    }

}
